home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm3.lha / SORGENTI8 / LEZIONE14-4a.s / LEZIONE14-4a.s
Text File  |  1995-10-23  |  3KB  |  83 lines

  1.  
  2. ; Lezione14-4a.s    ** SUONA FORME D'ONDA COMPLESSE **
  3.  
  4.  
  5.     SECTION    SampleMono,CODE
  6.  
  7. Start:
  8.     move.l    4.w,a6
  9.     jsr    -$78(A6)        ; _LVODisable
  10.     bset    #1,$bfe001        ; Spegne il filtro passa-basso
  11.     lea    $dff000,a6
  12.     move.w    $2(a6),d7        ; dmaconr - Salva DMA dell'OS
  13.  
  14. ;             __
  15. ;        .---'  `---.   
  16. ;        |    _-    |   
  17. ;        | /\ ..  _ |   
  18. ;        | \_\____) |   
  19. ;       _`----------'_
  20. ;     ./ __ techno __ \.
  21. ;     |  |__________|  |
  22. ;     |  |   _____  |  |
  23. ;     |__|    /|\   |__|
  24. ;    _(/\)_____|____(/\)_
  25. ;    \_________|________/
  26.  
  27.     move.l    #sample,$a0(a6)        ; AUD0LCH.w+AUD0LCL.w=AUD0LC.l
  28.     move.l    #sample,$b0(a6)        ; AUD1LCH.w+AUD1LCL.w=AUD1LC.l
  29.     move.w    #(sample_end-sample)/2,$a4(a6)    ; lunghezza in word (AUD0LEN)
  30.     move.w    #(sample_end-sample)/2,$b4(a6)    ; lunghezza in word (AUD1LEN)
  31.  
  32. Clock    equ    3546895
  33.  
  34.     move.w    #clock/21056,$a6(a6)    ; AUD0PER a 168
  35.     move.w    #clock/21056,$b6(a6)    ; AUD1PER a 168
  36.  
  37.     move.w    #64,$a8(a6)        ; AUD0VOL al massimo (0 dB)
  38.     move.w    #64,$b8(a6)        ; AUD1VOL al massimo (0 dB)
  39.     move.w    #$8003,$96(a6)        ; Accende AUD0-AUD1 DMA in DMACONW
  40.  
  41. WLMB:
  42.     btst    #6,$bfe001        ;aspetta il tasto sinistro del mouse
  43.     bne.s    WLMB
  44.  
  45.     or.w    #$8000,d7        ; accende il bit 15 (SET/CLR)
  46.     move.w    #$0003,$96(a6)        ; spegne i DMA
  47.     move.w    d7,$96(a6)        ; reimposta DMA dell'OS
  48.     move.l    4.w,a6
  49.     jsr    -$7e(a6)        ; _LVOEnable
  50.     rts
  51.  
  52. ******************************************************************************
  53.  
  54.     SECTION    Sample,DATA_C
  55.  
  56. ; Nota: il sample e' tratto da "NASP" by Pyratronik/IBB
  57.  
  58. Sample:    incbin    "assembler3:sorgenti8/carrasco.21056"
  59. Sample_end:
  60.  
  61.     END
  62.  
  63. ******************************************************************************
  64.  
  65. Per quanto riguarda questo esempio, le cose da spiegare non sono poi molte:
  66. non ci sono novita', anzi, e' molto simile all'esempio 1, e siamo abituati
  67. a listati ben piu' impegnativi.
  68. Preciso solamente una cosa: la frequenza di campionamento del sample e' di
  69. 21056 Hz, pari alla frequenza originale di registrazione: e' necessario
  70. porre una VELOCITA' DI CAMPIONAMENTO uguale a quella di digitalizzazione
  71. se si vuole sentire il suono alla velocita' corretta...provate a cambiare
  72. il periodo di campionamento in AUDxPER...
  73.  
  74. *** Voglio sottolineare che 21056 NON esprime il numero di volte in cui
  75. viene letto l'intero sample, ma la frequenza di lettura di byte per byte:
  76. vengono letti 21056 byte al secondo in un sample di lunghezza arbitraria;
  77. all'hardware bisogna comunicare il periodo di campionamento relativo
  78. alla velocita' di lettura.
  79. Come abbiamo fatto per l'armonica: prima abbiamo stabilito quante volte doveva
  80. venir letta l'INTERA onda, poi abbiamo calcolato il periodo di campionamento
  81. moltiplicando la frequenza della nota per la lunghezza del sample in byte, per
  82. ottenere la velocita' di lettura ***.
  83.